package com.itheima.advice;


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//切面类： 统计业务类中的所有方法的运行时间
@Component
@Aspect
public class TimeConsumeAdvice {
    //配置切入点
    @Pointcut("execution(* com.itheima..impl.*.query*(..))")
    public void pt() {
    }

    //配置环绕通知
    @Around("pt()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        //前增强：开启时间记录
        long beginTime = System.currentTimeMillis();

        //执行原有的方法
        Object result = pjp.proceed();

        //后增强：时间统计
        long endTime = System.currentTimeMillis();

        //获取执行的方法名字
        String methodName = pjp.getSignature().getName();
        System.out.println(methodName + "=> 执行:" + (endTime - beginTime) + "毫秒");

        return result;
    }

}
